package org.pictual.controller;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;

import javax.imageio.ImageIO;

import net.coobird.thumbnailator.Thumbnails;

import org.apache.log4j.Logger;
import org.pictual.util.ConstantsKeys;

public class DescargaImagen {

	private String urlImagen;
	private final String rutaDirectorio="images/google/big/";/*C:/desarrollo/proyectos/pictual/Pictual_100612/Pictual/WebContent/*/
	public static File f;
	
	protected static Logger log= Logger.getLogger(DescargaImagen.class);
	public static InputStream is;
	public DescargaImagen(String url){
		this.urlImagen=url;
	}
	
	public String processDownload(String palabra, int n){
			try {
				// Url con la foto
				URL url = new URL(urlImagen);

				// establecemos conexion
				URLConnection urlCon = url.openConnection();

				// Sacamos por pantalla el tipo de fichero
//				System.out.println(urlCon.getContentType());

				// Se obtiene el inputStream de la foto web y se abre el fichero
				// local.
				InputStream is = urlCon.getInputStream();
				String ruta=Controlador.getRuta()+"WebContent/"+rutaDirectorio+palabra+"_"+n+".jpg";
//				System.out.println(ruta);
//				log.info("Ruta: "+ruta);
				FileOutputStream fos = new FileOutputStream(ruta);
				
				// Lectura de la foto de la web y escritura en fichero local
				byte[] array = new byte[1000]; // buffer temporal de lectura.
				int leido = is.read(array);
				while (leido > 0) {
					fos.write(array, 0, leido);
					leido = is.read(array);
				}

				// cierre de conexion y fichero.
				is.close();
				fos.close();
				log.info("Imagen descargada");
				return ruta;
			} catch (Exception e) {
				log.error("Error al descargar la imagen", e);
			}
		return null;
	}
	
	/**
	* Método para subir un archivo local a un servidor FTP
	* tenemos que pasarle los datos de:
	* ip o hostname del servidor
	* usuario
	* contraseña
	* la ruta completa del fichero local a subir
	* la ruta en donde queramos colocar el archivo en el servidor FTP
	* ej: uploadFileByFTP("servidor", "usuario", "contraseña", "c:\\prueba.txt", "/mi_dir/prueba.txt");
	*/
	public static String uploadImageByFTP(String urlImage, String name, String format) {
		try {
			
			//Lee la url y obtiene un InputStream
			///////////////////////////////////////////
			// Url con la foto
			URL url = new URL(urlImage);
	
			// establecemos conexion
			URLConnection urlCon = url.openConnection();
	
			// Sacamos por pantalla el tipo de fichero
			log.debug(urlCon.getContentType());
			
	
			// Se obtiene el inputStream de la foto web y se abre el fichero
			// local.
			is = urlCon.getInputStream();
			
			//Obtiene un File del InputStream
			///////////////////////////////////////////
			f=new File(name+"."+format);
			
			OutputStream salida=new FileOutputStream(f);
			byte[] buf =new byte[1024];
			int len;
			while((len=is.read(buf))>0){
				salida.write(buf,0,len);
			}
			
			//Obtiene un BufferedImage del File y escribe una imagen 
			//////////////////////////////////////////////
	
			String ftp=
					"ftp://" + ConstantsKeys.USER_FTP +
					":" + ConstantsKeys.PASS_FTP + 
					"@" + ConstantsKeys.SERVER_FTP + 
					ConstantsKeys.PATH_FTP_IMAGES + 
					"/"+name+"."+format + ";type=i";
			
			
			log.debug("URL del ftp: "+ftp);
			URL urlFTP = new URL(ftp);
			URLConnection urlc = urlFTP.openConnection();
			OutputStream os = urlc.getOutputStream();
//			BufferedReader br = new BufferedReader(new FileReader(f));
			BufferedImage imagen = ImageIO.read(f);
			ImageIO.write(imagen, format, os);
//			
			os.flush();
			os.close();
			salida.close();
			
			
			return ConstantsKeys.PATH_IMAGES + "/" + name + "." + format;
		} catch (Exception e) {
			log.error("Error al subir el fichero al ftp", e);
			return null;
		}
	}
	
	public static void main(String[] args) {
		System.out.println(DescargaImagen.uploadImageByFTP("http://thickbox.net/images/plant4.jpg", "prueba", "jpg"));
		
	}

	public static String uploadFileByFTP(File thumbnail, String name, String format) {
	
		try{
			OutputStream salida=new FileOutputStream(thumbnail);
			byte[] buf =new byte[1024];
			int len;
			while((len=is.read(buf))>0){
				salida.write(buf,0,len);
			}
			
			//Obtiene un BufferedImage del File y escribe una imagen 
			//////////////////////////////////////////////
	
			String ftp=
					"ftp://" + ConstantsKeys.USER_FTP +
					":" + ConstantsKeys.PASS_FTP + 
					"@" + ConstantsKeys.SERVER_FTP + 
					ConstantsKeys.PATH_FTP_IMAGES + 
					"/"+name+"."+format + ";type=i";
			
			
			log.debug("URL del ftp: "+ftp);
			URL urlFTP = new URL(ftp);
			URLConnection urlc = urlFTP.openConnection();
			OutputStream os = urlc.getOutputStream();
	//		BufferedReader br = new BufferedReader(new FileReader(f));
			BufferedImage imagen = ImageIO.read(thumbnail);
			ImageIO.write(imagen, format, os);
	//		
			os.flush();
			os.close();
			salida.close();
			return ConstantsKeys.PATH_IMAGES + "/" + name + "." + format;
		} catch (Exception e) {
			log.error("Error al subir el fichero al ftp", e);
			return null;
		}
	}

	public static String uploadThumbnailByFTP(String urlImage, String name, int widht, int height, String format) {
		try {
			
			//Lee la url y obtiene un InputStream
			///////////////////////////////////////////
			// Url con la foto
			URL url = new URL(urlImage);
	
			// establecemos conexion
			URLConnection urlCon = url.openConnection();
	
			// Sacamos por pantalla el tipo de fichero
			log.debug(urlCon.getContentType());
			
	
			// Se obtiene el inputStream de la foto web y se abre el fichero
			// local.
			is = urlCon.getInputStream();
			
			//Obtiene un File del InputStream
			///////////////////////////////////////////
			f=new File(name+"."+format);
			
			
			
			OutputStream salida=new FileOutputStream(f);
			byte[] buf =new byte[1024];
			int len;
			while((len=is.read(buf))>0){
				salida.write(buf,0,len);
			}
			
			//Obtiene un BufferedImage del File y escribe una imagen 
			//////////////////////////////////////////////
	
			String ftp=
					"ftp://" + ConstantsKeys.USER_FTP +
					":" + ConstantsKeys.PASS_FTP + 
					"@" + ConstantsKeys.SERVER_FTP + 
					ConstantsKeys.PATH_FTP_IMAGES + 
					"/"+name+"."+format + ";type=i";
			
			
			log.debug("URL del ftp: "+ftp);
			URL urlFTP = new URL(ftp);
			URLConnection urlc = urlFTP.openConnection();
			OutputStream os = urlc.getOutputStream();
//			BufferedReader br = new BufferedReader(new FileReader(f));
			BufferedImage imagen = ImageIO.read(f);
			ImageIO.write(Thumbnails.of(url).size(widht, height).asBufferedImage(), format, os);
//			
			os.flush();
			os.close();
			salida.close();
			
			
			return ConstantsKeys.PATH_IMAGES + "/" + name + "." + format;
		} catch (Exception e) {
			log.error("Error al subir el fichero al ftp", e);
			return null;
		}
	}
}
